package com.lostfound.controller;

import com.lostfound.common.Result;
import com.lostfound.entity.LostFoundItem;
import com.lostfound.service.LostFoundItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 失物招领信息 - 控制器
 * 
 * @author 学生姓名
 * @description 接收前端请求，调用服务层处理业务，返回JSON数据
 */
@RestController  // 标识这是一个RESTful风格的控制器，返回JSON数据
@RequestMapping("/lostfound")  // 请求路径前缀：/api/lostfound
@CrossOrigin  // 允许跨域访问
public class LostFoundItemController {

    @Autowired  // 自动注入服务层对象
    private LostFoundItemService lostFoundItemService;

    /**
     * 查询失物招领列表（支持筛选）
     * GET /api/lostfound/list
     * @param itemType 物品类型（可选，0-失物，1-拾物）
     * @param status 状态（可选，0-进行中，1-已完成）
     * @return 统一返回结果
     */
    @GetMapping("/list")
    public Result<List<LostFoundItem>> getList(
            @RequestParam(required = false) Integer itemType,
            @RequestParam(required = false) Integer status) {
        
        List<LostFoundItem> list = lostFoundItemService.getList(itemType, status);
        return Result.success(list);
    }

    /**
     * 搜索失物招领信息
     * GET /api/lostfound/search?keyword=钱包
     * @param keyword 搜索关键词
     * @return 统一返回结果
     */
    @GetMapping("/search")
    public Result<List<LostFoundItem>> search(@RequestParam String keyword) {
        List<LostFoundItem> list = lostFoundItemService.searchByKeyword(keyword);
        return Result.success(list, "搜索成功");
    }

    /**
     * 根据ID查询详情
     * GET /api/lostfound/1
     * @param id 记录ID
     * @return 统一返回结果
     */
    @GetMapping("/{id}")
    public Result<LostFoundItem> getById(@PathVariable Long id) {
        LostFoundItem item = lostFoundItemService.getById(id);
        if (item != null) {
            return Result.success(item);
        } else {
            return Result.error("记录不存在");
        }
    }

    /**
     * 发布失物招领信息
     * POST /api/lostfound/publish
     * @param item 失物招领信息对象（通过请求体传入）
     * @return 统一返回结果
     */
    @PostMapping("/publish")
    public Result<String> publish(@RequestBody LostFoundItem item) {
        boolean success = lostFoundItemService.publish(item);
        if (success) {
            return Result.success("发布成功");
        } else {
            return Result.error("发布失败");
        }
    }

    /**
     * 更新失物招领信息
     * PUT /api/lostfound/update
     * @param item 失物招领信息对象
     * @return 统一返回结果
     */
    @PutMapping("/update")
    public Result<String> update(@RequestBody LostFoundItem item) {
        boolean success = lostFoundItemService.update(item);
        if (success) {
            return Result.success("更新成功");
        } else {
            return Result.error("更新失败");
        }
    }

    /**
     * 标记为已完成（已找到/已归还）
     * PUT /api/lostfound/complete/1
     * @param id 记录ID
     * @return 统一返回结果
     */
    @PutMapping("/complete/{id}")
    public Result<String> markAsCompleted(@PathVariable Long id) {
        boolean success = lostFoundItemService.markAsCompleted(id);
        if (success) {
            return Result.success("操作成功");
        } else {
            return Result.error("操作失败");
        }
    }

    /**
     * 删除失物招领信息
     * DELETE /api/lostfound/1
     * @param id 记录ID
     * @return 统一返回结果
     */
    @DeleteMapping("/{id}")
    public Result<String> delete(@PathVariable Long id) {
        boolean success = lostFoundItemService.delete(id);
        if (success) {
            return Result.success("删除成功");
        } else {
            return Result.error("删除失败");
        }
    }
}



